package ModelLag;
import java.util.ArrayList;
import java.lang.Exception.*;



/**
 * Klasse som inderholder en liste over Vare objekter
 */
public class VareContainer
{
    private ArrayList<Vare> varer;
    private static VareContainer instance;

    /**
     * Construktor som initialiserer listen med Vare objekter
     */
    private VareContainer()
    {
        varer = new ArrayList<Vare>();
    }
    
    /**
     * singleton
     */ 
    public static VareContainer getInstance()
    {
        if(instance ==  null)
        {
            instance = new VareContainer();
        }
        return instance;
    }
    /**
     * metode som tilfoejer et Vare objekt til listen
     * @param Vare
     */
    public void tilfoejVare(Vare v)
    {
        varer.add(v);
    }
    /**
     * metode som finder en Vare ud fra eanNr og returnerer dette
     * @param eanNr
     * @returns Vare
     */
    public Vare findVare(String eanNr)
    {
        int index = 0;
        int index2 = 0;
        boolean found = false;
        while(index < varer.size() && !found)
        {
            Vare vare = varer.get(index);
            if(vare.getEanNr().equals(eanNr))
            {
                index2 = index;
                found = true;
            }
            index++;
        }
        Vare v = varer.get(index2);
        if(!found)
        {
            return null;
        }
        else
        {
            return v;
        }
    }
    /**
     * metode som sletter en Vare ud fra et givent eanNr
     * @param eanNr
     */
    public void sletVare(String eanNr)
    {
        Vare v = findVare(eanNr);
        varer.remove(v);
    }
    
    /**
     * metode som tjekker om en eller flere Vare objekter er under minimums beholdning. Hvis de er, bliver en exception sendt.
     * @returns exception til en Vare, saafremt den er under minimums beholdning. Hvis ikke, goer den ikke noget.
     */
    public void lagerCheck()throws Exception
    {
        for(Vare v : varer)
        {
            if(v.getAntal() < v.getMinLager())
            {
                throw new Exception(v.getBeskrivelse() + " er under minimums beholdning");
            }
        }
    }
    
    /**
     * metode som tjekker om om en eller flere Vare objekter er under minimumsbehold samt returnerer en liste indeholdende disse, hvis der er nogle.
     * @returs ArraList med Vare objekter som evt. maatte vare under minimumsbeholdning.
     */
    public ArrayList<Vare> tjekHeleLager()
    {
        ArrayList<Vare> varerUnderBeholdning = new ArrayList<Vare>();
        for(Vare v : varer)
        {
            if(v.getAntal() < v.getMinLager())
            {
                varerUnderBeholdning.add(v);
            }
        }
        return varerUnderBeholdning;
    }
        
}
